package com.pkche.core.advanced.safety;

import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 
 * <h6>配置文件抽取器</h6>
 *
 * User: Qiang <br/>
 * Describe： <br/>
 *
 * @date 2015年3月7日 下午12:47:01
 */
public class AllocationExtract {
	private final static List<AllocationListener> listenCollect = new ArrayList<AllocationListener>();
	static {
		// 设置定时器
		new Timer("allocation-extract-timer").schedule(new ReloadAllcation(),
				1000 * 10, 1000 * 10);
	}

	/**
	 * 注册一个配置文件监听器
	 * 
	 * @param listen
	 */
	public static void register(AllocationListener listen) {
		listenCollect.add(listen);
	}

	// 遍历刷新
	static void reload() {
		for (AllocationListener listen : listenCollect) {
			// 返回跟踪器
			long last_reload = listen.getLastReload();
			long last_mod = listen.lastModified();
			if (last_mod > last_reload) {
				System.out.println("Reload \t" + listen.getClass().getName());
				// 文件被修改
				listen.reload(listen.getCollection());
				// 变更最后载入时间
				listen.setLastReload(listen.lastModified());
			}
		}
	}

	// 刷新配置的跟踪器
	static class ReloadAllcation extends TimerTask {

		@Override
		public void run() {
			// TODO Auto-generated method stub
			// 遍历更新
			AllocationExtract.reload();
		}
	}
}
